package br.siseventos.managed;


import br.siseventos.model.TbRecurso;
import br.siseventos.model.TdTipoRecurso;
import br.siseventos.service.RecursoService;
import br.siseventos.service.TipoRecursoService;
import br.siseventos.view.util.CallbackHelper;
import br.siseventos.view.util.MessageHelper;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;


@ManagedBean(name = "recursoBean")
@ViewScoped
public class RecursoBean extends BaseBean{

    //campos
    private RecursoService recursoService = null;
    private TipoRecursoService tipoRecursoService = null;
    private String descricao;
    private String observacao;
    private List<TbRecurso> lstRecursos;
    private List<TdTipoRecurso> lstTipoRecurso;
    private TbRecurso recursoSelecionado;
    private TdTipoRecurso tipoRecursoSelecionado;

    //Construtor
    public RecursoBean() {
        try {
            // Inicializando os Servicos
            recursoService = new RecursoService();
            tipoRecursoService = new TipoRecursoService();
            //carregando datatable de recursos
            lstRecursos = recursoService.consultarTodos();
            //carregando o menu de tipo de recurso
            lstTipoRecurso = tipoRecursoService.consultarTodos();
        } catch (Exception e) {
        }


    }

    //Getters and Setters 

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public List<TbRecurso> getLstRecursos() {
        return lstRecursos;
    }

    public void setLstRecursos(List<TbRecurso> lstRecursos) {
        this.lstRecursos = lstRecursos;
    }

    public List<TdTipoRecurso> getLstTipoRecurso() {
        return lstTipoRecurso;
    }

    public void setLstTipoRecurso(List<TdTipoRecurso> lstTipoRecurso) {
        this.lstTipoRecurso = lstTipoRecurso;
    }

    public TbRecurso getRecursoSelecionado() {
        return recursoSelecionado;
    }

    public void setRecursoSelecionado(TbRecurso recursoSelecionado) {
        this.recursoSelecionado = recursoSelecionado;
    }

    public TdTipoRecurso getTipoRecursoSelecionado() {
        return tipoRecursoSelecionado;
    }

    public void setTipoRecursoSelecionado(TdTipoRecurso tipoRecursoSelecionado) {
        this.tipoRecursoSelecionado = tipoRecursoSelecionado;
    }

    // Converters e Utils
    public void popularListaTipoRecurso(List<TbRecurso> lst) {
        lstRecursos = lst;
    }
    // Actions e listeners

    public void cadastrarRecurso(ActionEvent ex) {
        try {
            // Criando o objeto Recurso a ser cadastrado no banco
            TbRecurso r = new TbRecurso();
            r.setDscRecurso(getDescricao());
            r.setTdTipoRecurso(getTipoRecursoSelecionado());

            // Cadastrando no banco
            recursoService.incluir(r);

            // Carregar a lista de publicos novamente
            popularListaTipoRecurso(recursoService.consultarTodos());

            // Mostrando msg de sucesso!
            MessageHelper.showGlobalMessage("Recurso cadastrado com sucesso!", FacesMessage.SEVERITY_INFO);

            // Adicionando o par‚metro de Callback
            CallbackHelper.addCallback("salvo", true);


        } catch (Exception e) {
            MessageHelper.showGlobalMessage("Erro ao cadastrar p˙blico!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void excluirRecruso(ActionEvent e) {
        FacesMessage msg = new FacesMessage();
        FacesContext contexto = FacesContext.getCurrentInstance();

        try {
            // Excluindo o p˙blico selecionado
            recursoService.excluir(getRecursoSelecionado().getIdtRecurso());

            // Carregar a lista de publicos novamente
            popularListaTipoRecurso(recursoService.consultarTodos());

            // Mostrando mensagem de sucesso
            MessageHelper.showGlobalMessage("Recurso excluÌdo com sucesso!", FacesMessage.SEVERITY_INFO);

        } catch (Exception ex) {
            // Mostrando mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao excluir recurso!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void alterarRecurso(ActionEvent e) {
        try {
            // Alterando o recurso
            recursoService.alterar(getRecursoSelecionado());

            // Carregar a lista de recursos novamente
            popularListaTipoRecurso(recursoService.consultarTodos());

            // Mostrando mensagem de sucesso
            MessageHelper.showGlobalMessage("Recurso alterado com sucesso!", FacesMessage.SEVERITY_INFO);

            // Adicionando o par‚metro de Callback
            CallbackHelper.addCallback("editado", true);

        } catch (Exception ex) {
            // Mostrando mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao alterar recurso!", FacesMessage.SEVERITY_ERROR);
        }
    }
}
